package com.ftg.learn.chapter14.isa.myabstra;

import java.util.AbstractMap;

/**
 *
 * 父类 -》 开放的属性和方法 - 》子类
 *
 *  java第一个特殊的类，抽象类(abstract 抽象)
 *  父类
 *      属性
 *      方法
 *      方法（）没有代码 s
 *
 *  -- 3000亿
 *  -- 要求
 *  面向父类编程 接收子类实例 ，一份代码可以产生不能结果 （多态【父与子】）
 *  1、不能实例化 new 对象s(); 抽象类一般用做父类
 *  2、抽象方法 public | protected修饰
 *
 *  FAQ:
 *    1、抽象类由于不能实例化，所以抽象类没有构造方法 ？
 *    2、抽象类是一个特殊的类，所以抽象类不能继承另外一个抽象类？
 *    3、如果父类当中存在有参构造方法，那么子类必须要存在一个有参构造方法，并调用父类构造方法？
 *    4、抽象类里可以有抽象方法那么就可以有抽象属性对吗？
 *    5、Java当中类是单继承的？
 *    6、子类的方法与父类的方法同名，参数列表相同，返回值相同，我们把这种方式叫重写？
 *    7、如果方法返回值不同叫方法重写吗？
 *    8、创建一个不可变对象的要求是什么？
 1）所有成员变量必须是private
 2）最好同时用final修饰(非必须)
 3）不提供能够修改原有对象状态的方法
 最常见的方式是不提供setter方法
 4）通过构造器初始化所有成员变量，引用类型的成员变量必须进行深拷贝(deep copy)
 5）getter方法不能对外泄露this引用以及成员变量的引用
 ....
 6）最好不允许类被继承(非必须)
 *
 * @author KangJx
 * @date 2021/7/23
 */
public abstract class A {

    //默认构造
    //属性 方法
    public int a = 9;

    public int add(int x,int y){
        return x + y;
    }
    //抽象方法

    protected  abstract int diff();
}
